package cn.tt.tuantuanerp.tuantuanerp.product.webapi.mapper;

import cn.tt.tuantuanerp.tuantuanerp.comment.pojo.dto.productModule.SkuAddNewBasicDTO;
import cn.tt.tuantuanerp.tuantuanerp.comment.pojo.entity.Sku;
import cn.tt.tuantuanerp.tuantuanerp.comment.pojo.vo.SkuDetailsVO;
import cn.tt.tuantuanerp.tuantuanerp.comment.pojo.vo.SkuForCheckVO;
import cn.tt.tuantuanerp.tuantuanerp.comment.pojo.vo.SkuForOrderVO;
import cn.tt.tuantuanerp.tuantuanerp.comment.pojo.vo.SkuForPurchaseVO;
import cn.tt.tuantuanerp.tuantuanerp.comment.pojo.vo.SkuListItemVO;
import org.springframework.stereotype.Repository;

import java.math.BigDecimal;
import java.util.List;

@Repository
public interface SkuMapper {
    /**
     * 添加新订单
     * @param skuAddNewBasicDTO sku基本信息
     * @return 受影响的行数
     */
    int addNewBasic(SkuAddNewBasicDTO skuAddNewBasicDTO);

    /**
     * 添加新订单
     * @param sku sku基本信息
     * @return 受影响的行数
     */
    int addNew(Sku sku);

    /**
     * 根据id删除sku
     * @param id skuId
     * @return 受影响的行数
     */
    int deleteById(Long id);

    /**
     * 修改sku
     * @param sku skuId
     * @return 受影响行数
     */
    int updateById(Sku sku);

    /**
     * 根据id查该sku是否被删除
     * @param id skuId
     * @return
     */
    Integer getIsDeleteById(Long id);

    /**
     * 根据id查询sku信息
     * @param id skuId
     * @return SkuDetails
     */
    SkuDetailsVO getDetailsById(Long id);

    /**
     * 根据id查询sku信息
     * @return 缺货的商品详情  缺货计算公式:预测日销量*(采购天数+库存警戒天数)+警戒量-库存量-采购在途量
     */
    List<SkuForPurchaseVO> getStockOutDetails();

    /**
     * 查询sku信息列表
     *
     * @return SKU列表
     */
    List<SkuListItemVO> list();

    /**
     *
     * @param skuId skuId
     * @return SkuListItemVO
     */
    SkuListItemVO getListItemById(Long skuId);

    /**
     * 添加订单功能查询商品信息
     * @param id id
     * @return SkuForOrderVO
     */
    SkuForOrderVO getInfoForOrder(Long id);

    /**
     * 添加盘点批次功能的查询商品信息
     * @param id id
     * @return SkuForCheckVO
     */
    SkuForCheckVO getInfoForCheck(Long id);

    /**
     *  添加采购单功能的查询商品信息
     *  @param id id
     * @return SkuForPurchaseVO
     */
    SkuForPurchaseVO getForPurchase(Long id);

    /**
     * 查询缺货商品
     * @return List<SkuDetailsVO>
     */
        List<SkuDetailsVO> stockOut();

    /**
     * 查询SKU成本
     * @param id id
     * @return BigDecimal
     */
    BigDecimal getWareCostPrice(Long id);

    /**
     * 根据id查SKU售价
     * @param id id
     * @return BigDecimal
     */
    BigDecimal getGoodsPrice(Long id);

    /**
     * 计算预测日销量
     * @param id id
     * @return 受影响行数
     */
    int updateCurrentAvailableDays(Long id);

    /**
     * 查询sku总条数
     * @return 受影响行数
     */
    int count();

    /**
     * ES
     * @return List<SkuDetailsVO>
     */
    List<SkuDetailsVO> searchSku();
}
